package com.bookcloud.java21.chapter12.泛型使用限制127;

public class GenericRestrictions<T> {
  private T value;

  // 1. 不能实例化类型参数
  public void faultyMethod() {
    // 错误: Cannot instantiate the type T
    // T newInstance = new T();
  }

  // 正确方式：通过反射创建实例（需要Class参数）
  public T createInstance(Class<T> clazz) throws Exception {
    return clazz.getDeclaredConstructor().newInstance();
  }

  // 2. 静态成员不能使用类型参数
  // 错误: Cannot make a static reference to the non-static type T
  // private static T staticField;

  // 但静态方法可以有自己的类型参数
  public static <E> E staticMethod(E input) {
    return input;
  }

  // 3. 数组限制
  public void arrayExample() {
    // 错误: Cannot create a generic array of T
    // T[] array = new T[10];

    // 正确方式：使用Object数组并转换
    T[] array = (T[]) new Object[10];
  }
}
